package saee.bean;

import java.io.Serializable;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.primefaces.context.RequestContext;

import saee.dao.VagaCursoDAO;
import saee.dao.VagaDAO;
import saee.modelo.Curso;
import saee.modelo.Empresa;
import saee.modelo.Vaga;
import saee.modelo.VagaCurso;

@ManagedBean
@ViewScoped
public class VagaBean implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Vaga vaga = new Vaga();
	private List<Vaga> vagas;
	private List<Vaga> vagasEmpresa;
	private List<Curso> cursos;
	private String textoPesquisa;
	private Empresa empresa;

	public Empresa getEmpresa() {
		return empresa;
	}

	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}

	public void limparVaga() {
		this.vaga = new Vaga();
		this.vagas = null;
		this.vagasEmpresa = null;
	}

	public Vaga getVaga() {
		return vaga;
	}

	public void setVaga(Vaga vaga) {
		this.vaga = vaga;
	}

	@SuppressWarnings("unchecked")
	public List<Vaga> getVagas() {
		if (vagas == null) {
			VagaDAO dao = new VagaDAO();
			this.vagas = dao.listarTodos(Vaga.class);
		}
		return vagas;
	}

	public void setVagas(List<Vaga> vagas) {
		this.vagas = vagas;
	}

	public void gravarVaga(ActionEvent actionEvent) {
		VagaDAO vagaDAO = new VagaDAO();
		RequestContext context = RequestContext.getCurrentInstance();
		FacesMessage msg = null;
		boolean gravado = false;

		try {
			vagaDAO.cadastrar(vaga);
			gravado = true;
			msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Gravado com sucesso", null);

		} catch (Exception e) {
			e.printStackTrace();
			gravado = false;
			msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Erro ao gravar", null);
		}
		limparVaga();
		FacesContext.getCurrentInstance().addMessage(null, msg);
		context.addCallbackParam("gravado", gravado);
	}

	public void alterarVaga(ActionEvent actionEvent) {
		VagaDAO vagaDAO = new VagaDAO();
		RequestContext context = RequestContext.getCurrentInstance();
		FacesMessage msg = null;
		boolean gravado = false;

		try {
			vagaDAO.atualizar(vaga);
			gravado = true;
			msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Alterado com sucesso", null);

		} catch (Exception e) {
			e.printStackTrace();
			gravado = false;
			msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Erro ao alterar", null);
		}
		limparVaga();
		FacesContext.getCurrentInstance().addMessage(null, msg);
		context.addCallbackParam("gravado", gravado);
	}

	public void removerVaga() {

		VagaDAO vagaDAO = new VagaDAO();
		FacesMessage msg = null;

		try {
			vagaDAO.excluir(Vaga.class, vaga.getId());
			limparVaga();

			msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Excluido com sucesso", null);
		} catch (Exception e) {
			e.printStackTrace();
			msg = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Erro ao excluir", null);
		}
		FacesContext.getCurrentInstance().addMessage(null, msg);
	}

	public void pesquisa() {
		VagaDAO dao = new VagaDAO();
		vagas = dao.listarTodosPesquisa(textoPesquisa);

	}

	public List<Curso> getCursos() {
		return cursos;
	}

	public void setCursos(List<Curso> cursos) {
		this.cursos = cursos;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	public String getTextoPesquisa() {
		return textoPesquisa;
	}

	public void setTextoPesquisa(String textoPesquisa) {
		this.textoPesquisa = textoPesquisa;
	}

	public List<Vaga> getVagasEmpresa() {
		if (vagas == null) {
			VagaDAO dao = new VagaDAO();
			this.vagasEmpresa = dao.listarTodosPorEmpresa(empresa);
		}
		return vagasEmpresa;
	}

	public void setVagasEmpresa(List<Vaga> vagasEmpresa) {
		this.vagasEmpresa = vagasEmpresa;
	}
	
	public void pesquisarPorEmpresa() {
		VagaDAO dao = new VagaDAO();
		vagasEmpresa = dao.listarTodosPorEmpresaETexto(textoPesquisa , empresa);

	}

}
